/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ObraSocialPresentacion.java
 *
 * Created on 24-jul-2010, 11:04:10
 */

package presentacion.cie9mc;

import hibernate.objeto.Cie9mc;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JOptionPane;
import presentacion.utilidad.tabla.MiModeloTabla;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.Cie9mcLogica;
import presentacion.CapaPresentacion;
import presentacion.GestionPacientePresentacion;
import presentacion.acceso.RestriccionAcceso;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.PopUpMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Administrador
 */
public class GestionCie9mcPresentacion extends javax.swing.JDialog {

    /** Creates new form ObraSocialPresentacion.
     *
     * @param parent
     * @param modal
     */
    public GestionCie9mcPresentacion(java.awt.Frame parent, boolean modal,
            boolean cie9mcPropias, boolean esGuiVisualizacion) {
        super(parent, modal);
        
        this.esGuiVisualizacion = esGuiVisualizacion;
        vectorCie9mc = new Vector<Cie9mc>();
        cie9mcSeleccionado = null;
        buscarPorCodigo = true;

        initComponents();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        personalizarGUI(cie9mcPropias);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea los datos de la ventana.
     *
     * @param cie9mcPropias true si se deben mostrar las enfermedades propias,
     * false en caso contrario.
     */
    private void personalizarGUI(boolean cie9mcPropias) {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarGestionCie9mc(this));

        if (!cie9mcPropias) {
            panelCie9mcPropias.setVisible(false);
        } else {
            cargarCie9mcPropias();
        }

        iniciarPaginador();
    }

    /**
     * Carga la tabla con las enfermedades propias.
     * 
     */
    private void cargarCie9mcPropias() {
        MiModeloTabla.cargarTablaCie9mc(
                    Cie9mcLogica.getVectorCie9mcPorIdPaciente(
                    GestionPacientePresentacion.getPaciente().getIdPaciente()),
                    tablaCie9mcPropias);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        panelBusqueda = new javax.swing.JPanel();
        botonBuscarPorNombre = new javax.swing.JButton();
        busquedaPorNombre = new javax.swing.JTextField();
        botonBuscarPorCodigo = new javax.swing.JButton();
        busquedaPorCodigo = new javax.swing.JTextField();
        textoBusquedaPorCodigo = new javax.swing.JLabel();
        textoBusquedaPorNombre = new javax.swing.JLabel();
        panelResultados = new javax.swing.JPanel();
        filtrar = new javax.swing.JTextField();
        textoFiltrar = new javax.swing.JLabel();
        tablaCie9mcScrollPanel = new javax.swing.JScrollPane();
        tablaCie9mc = new javax.swing.JTable(new MiModeloTabla());
        botonAgregarEnfermedad = new javax.swing.JButton();
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        panelCie9mcPropias = new javax.swing.JPanel();
        textoFiltrarCie9mcPropias = new javax.swing.JLabel();
        filtrarCie9mcPropias = new javax.swing.JTextField();
        tablaCie9mcPropiasScrollPanel = new javax.swing.JScrollPane();
        tablaCie9mcPropias = new javax.swing.JTable(new MiModeloTabla());

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Gestión Cie 9 MC");
        setMinimumSize(new java.awt.Dimension(1024, 600));
        setResizable(false);

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Gestión de Cie 9 MC");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(406, 20));

        panelBusqueda.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Criterio de búsqueda", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelBusqueda.setForeground(Fuente.COLOR_NORMAL);
        panelBusqueda.setPreferredSize(new java.awt.Dimension(497, 105));

        botonBuscarPorNombre.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarPorNombre.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarPorNombre.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarPorNombre.setText("Buscar");
        botonBuscarPorNombre.setToolTipText("Realiza la búsqueda según el nombre consultado");
        botonBuscarPorNombre.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarPorNombre.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarPorNombreActionPerformed(evt);
            }
        });

        busquedaPorNombre.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaPorNombre.setForeground(Fuente.COLOR_NORMAL);
        busquedaPorNombre.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaPorNombre.setPreferredSize(new java.awt.Dimension(200, 20));

        botonBuscarPorCodigo.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonBuscarPorCodigo.setForeground(Fuente.COLOR_NORMAL);
        botonBuscarPorCodigo.setIcon(Icono.ICONO_16_BUSCAR);
        botonBuscarPorCodigo.setText("Buscar");
        botonBuscarPorCodigo.setToolTipText("Realiza la búsqueda según el código consultado");
        botonBuscarPorCodigo.setPreferredSize(new java.awt.Dimension(110, 20));
        botonBuscarPorCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarPorCodigoActionPerformed(evt);
            }
        });

        busquedaPorCodigo.setFont(Fuente.FUENTE_TEXTFIELD);
        busquedaPorCodigo.setForeground(Fuente.COLOR_NORMAL);
        busquedaPorCodigo.setToolTipText("Filtra los datos encontrados por algún criterio");
        busquedaPorCodigo.setPreferredSize(new java.awt.Dimension(200, 20));

        textoBusquedaPorCodigo.setFont(Fuente.FUENTE_LABEL);
        textoBusquedaPorCodigo.setForeground(Fuente.COLOR_NORMAL);
        textoBusquedaPorCodigo.setText("Código");
        textoBusquedaPorCodigo.setPreferredSize(new java.awt.Dimension(50, 20));

        textoBusquedaPorNombre.setFont(Fuente.FUENTE_LABEL);
        textoBusquedaPorNombre.setForeground(Fuente.COLOR_NORMAL);
        textoBusquedaPorNombre.setText("Nombre");
        textoBusquedaPorNombre.setPreferredSize(new java.awt.Dimension(50, 20));

        javax.swing.GroupLayout panelBusquedaLayout = new javax.swing.GroupLayout(panelBusqueda);
        panelBusqueda.setLayout(panelBusquedaLayout);
        panelBusquedaLayout.setHorizontalGroup(
            panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBusquedaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoBusquedaPorCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoBusquedaPorNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(busquedaPorNombre, javax.swing.GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE)
                    .addComponent(busquedaPorCodigo, javax.swing.GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botonBuscarPorCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonBuscarPorNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelBusquedaLayout.setVerticalGroup(
            panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBusquedaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelBusquedaLayout.createSequentialGroup()
                        .addComponent(botonBuscarPorCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botonBuscarPorNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelBusquedaLayout.createSequentialGroup()
                        .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(textoBusquedaPorCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(busquedaPorCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(panelBusquedaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(textoBusquedaPorNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(busquedaPorNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(16, Short.MAX_VALUE))
        );

        panelResultados.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Resultados", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Fuente.FUENTE_PANEL_BORDE));
        panelResultados.setForeground(Fuente.COLOR_NORMAL);
        panelResultados.setPreferredSize(new java.awt.Dimension(497, 551));

        filtrar.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrar.setForeground(Fuente.COLOR_NORMAL);
        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrar.setText("Filtrar");

        tablaCie9mcScrollPanel.setToolTipText("Doble click para seleccionar");
        tablaCie9mcScrollPanel.setPreferredSize(new java.awt.Dimension(459, 464));

        tablaCie9mc.setToolTipText("Click derecho para más opciones");
        tablaCie9mc.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaCie9mcMouseClicked(evt);
            }
        });
        tablaCie9mc.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tablaCie9mcKeyPressed(evt);
            }
        });
        tablaCie9mcScrollPanel.setViewportView(tablaCie9mc);
        MiModeloTabla.inicializarTabla(tablaCie9mc);

        botonAgregarEnfermedad.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarEnfermedad.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarEnfermedad.setText("Agregar Cie 9 MC");
        botonAgregarEnfermedad.setToolTipText("Agrega una nueva Cie 9 MC");
        botonAgregarEnfermedad.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarEnfermedad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarEnfermedadActionPerformed(evt);
            }
        });

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelResultadosLayout = new javax.swing.GroupLayout(panelResultados);
        panelResultados.setLayout(panelResultadosLayout);
        panelResultadosLayout.setHorizontalGroup(
            panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelResultadosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaCie9mcScrollPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 465, Short.MAX_VALUE)
                    .addGroup(panelResultadosLayout.createSequentialGroup()
                        .addComponent(botonAgregarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 58, Short.MAX_VALUE)
                        .addComponent(textoFiltrar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelResultadosLayout.setVerticalGroup(
            panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelResultadosLayout.createSequentialGroup()
                .addGroup(panelResultadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar)
                    .addComponent(botonAgregarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaCie9mcScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 469, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        panelCie9mcPropias.setBorder(javax.swing.BorderFactory.createTitledBorder("Enfermedades del paciente"));
        panelCie9mcPropias.setPreferredSize(new java.awt.Dimension(497, 551));

        textoFiltrarCie9mcPropias.setFont(Fuente.FUENTE_LABEL);
        textoFiltrarCie9mcPropias.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrarCie9mcPropias.setText("Filtrar");

        filtrarCie9mcPropias.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarCie9mcPropias.setForeground(Fuente.COLOR_NORMAL);
        filtrarCie9mcPropias.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarCie9mcPropias.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrarCie9mcPropias.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarCie9mcPropiasKeyReleased(evt);
            }
        });

        tablaCie9mcPropiasScrollPanel.setToolTipText("Doble click para seleccionar");
        tablaCie9mcPropiasScrollPanel.setPreferredSize(new java.awt.Dimension(459, 482));

        tablaCie9mcPropias.setToolTipText("Click derecho para más opciones");
        tablaCie9mcPropias.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaCie9mcPropiasMouseClicked(evt);
            }
        });
        tablaCie9mcPropias.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tablaCie9mcPropiasKeyPressed(evt);
            }
        });
        tablaCie9mcPropiasScrollPanel.setViewportView(tablaCie9mcPropias);
        MiModeloTabla.inicializarTabla(tablaCie9mcPropias);

        javax.swing.GroupLayout panelCie9mcPropiasLayout = new javax.swing.GroupLayout(panelCie9mcPropias);
        panelCie9mcPropias.setLayout(panelCie9mcPropiasLayout);
        panelCie9mcPropiasLayout.setHorizontalGroup(
            panelCie9mcPropiasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelCie9mcPropiasLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCie9mcPropiasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaCie9mcPropiasScrollPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 465, Short.MAX_VALUE)
                    .addGroup(panelCie9mcPropiasLayout.createSequentialGroup()
                        .addComponent(textoFiltrarCie9mcPropias)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrarCie9mcPropias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelCie9mcPropiasLayout.setVerticalGroup(
            panelCie9mcPropiasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCie9mcPropiasLayout.createSequentialGroup()
                .addGroup(panelCie9mcPropiasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(filtrarCie9mcPropias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrarCie9mcPropias))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaCie9mcPropiasScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(panelBusqueda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(panelResultados, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(10, 10, 10)
                .addComponent(panelCie9mcPropias, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelBusqueda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelResultados, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(panelCie9mcPropias, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Filtrado de la tabla mediante el texto ingresado.
     *
     * @param evt
     */
    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter =
                new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaCie9mc.getModel());
        tablaCie9mc.setRowSorter(sorter);

        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
    }//GEN-LAST:event_filtrarKeyReleased

    /**
     * Efectúa la búsqueda por código.
     *
     * @param evt
     */
    private void botonBuscarPorCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarPorCodigoActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        buscarPorCodigo = true;
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarPorCodigo();
}//GEN-LAST:event_botonBuscarPorCodigoActionPerformed

    /**
     * Efectúa la búsqueda por nombre de la enfermedad.
     *
     * @param evt
     */
    private void botonBuscarPorNombreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarPorNombreActionPerformed
        CapaPresentacion.personalizarBotonesPaginadorActivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        buscarPorCodigo = false;
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        buscarPorNombre();
}//GEN-LAST:event_botonBuscarPorNombreActionPerformed

    /**
     * Al presionar buscar, busca por código.
     */
    private void buscarPorCodigo() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        
        vectorCie9mc = Cie9mcLogica.getVectorCie9mcPorCodigoYEnBd(
                busquedaPorCodigo.getText());
        MiModeloTabla.cargarTablaCie9mc(vectorCie9mc, tablaCie9mc);
    }

    /**
     * Al presionar buscar, busca por nombre.
     */
    private void buscarPorNombre() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);

        vectorCie9mc = Cie9mcLogica.getVectorCie9mcPorNombreYEnBd(
                busquedaPorNombre.getText());
        MiModeloTabla.cargarTablaCie9mc(vectorCie9mc, tablaCie9mc);
    }

    private void tablaCie9mcMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaCie9mcMouseClicked
        //Seleccion excluyente con respecto a la tabla de cie9mcPropia
        tablaCie9mcPropias.clearSelection();

        //Selecciona con doble click
        if (evt.getButton() == 1 && evt.getClickCount() == 2) {
            seleccionarCie9mc();
            
        } else {
            //Despliega pop-up
            PopUpMenu.crearPopupMenuCie9mc(tablaCie9mc, this);
        }
    }//GEN-LAST:event_tablaCie9mcMouseClicked

    private void botonAgregarEnfermedadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarEnfermedadActionPerformed
        agregarCie9mc();
        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
        //Reinicia paginador
        Paginador.paginarElemento[0] = false;
}//GEN-LAST:event_botonAgregarEnfermedadActionPerformed

    private void filtrarCie9mcPropiasKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarCie9mcPropiasKeyReleased
        TableRowSorter<MiModeloTabla> sorter =
                new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaCie9mcPropias.getModel());
        tablaCie9mcPropias.setRowSorter(sorter);

        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
    }//GEN-LAST:event_filtrarCie9mcPropiasKeyReleased

    private void tablaCie9mcPropiasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaCie9mcPropiasMouseClicked
        //Seleccion excluyente con respecto a la tabla de cie9mc
        tablaCie9mc.clearSelection();
        
        //Selecciona con doble click
        if (evt.getButton() == 1 && evt.getClickCount() == 2) {
            seleccionarCie9mc();
            
        }
    }//GEN-LAST:event_tablaCie9mcPropiasMouseClicked

    private void tablaCie9mcPropiasKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaCie9mcPropiasKeyPressed
        //Seleccion excluyente con respecto a la tabla de cie9mc
        tablaCie9mc.clearSelection();
    }//GEN-LAST:event_tablaCie9mcPropiasKeyPressed

    private void tablaCie9mcKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaCie9mcKeyPressed
        //Seleccion excluyente con respecto a la tabla de cie9mcPropias
        tablaCie9mcPropias.clearSelection();
    }//GEN-LAST:event_tablaCie9mcKeyPressed

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaCie9mc();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaCie9mc();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    /**
     * Setea la enfermedad seleccionada.
     *
     */
    public void seleccionarCie9mc() {
        if (!esGuiVisualizacion) {
            //Verifica de cual tabla tiene que recoger la enfermedad seleccionada
            if (tablaCie9mc.getSelectedRow() != -1) {
                //Completa info para devolver a la ventana anterior
                cie9mcSeleccionado = (Cie9mc) MiModeloTabla.recuperarObjetoDeTabla(
                        Cie9mc.class.getName(), tablaCie9mc);
            } else if (tablaCie9mcPropias.getSelectedRow() != -1) {
                //Completa info para devolver a la ventana anterior
                cie9mcSeleccionado = (Cie9mc) MiModeloTabla.recuperarObjetoDeTabla(
                        Cie9mc.class.getName(), tablaCie9mcPropias);
            }

            if (cie9mcSeleccionado != null) {
                this.dispose();
            }
        }
    }

    /**
     * Modifica una enfermedad Cie9mc de la base de datos.
     *
     * @return true si se modificó correctamente, false en caso contrario
     */
    public boolean propiedadesCie9mc() {
        Cie9mc cie9mc = (Cie9mc) MiModeloTabla.
                recuperarObjetoDeTabla(Cie9mc.class.getName(), tablaCie9mc);

        //Si hay alguna fila seleccionada
        if (cie9mc != null && CapaPresentacion.modoModificacion) {
            RestriccionAcceso.Cie9mcPresentacion(null, true, cie9mc);
            
            MiModeloTabla.cargarTablaCie9mc(vectorCie9mc, tablaCie9mc);
            MiModeloTabla.seleccionarFilaDeTabla(cie9mc.getCodigoCie9mc(),
                    tablaCie9mc, tablaCie9mcScrollPanel);
        }
        return false;
    }

    /**
     * Agrega una enfermedad Cie9mc de la base de datos.
     *
     * @return true si se agregó correctamente, false en caso contrario
     */
    public void agregarCie9mc() {
        RestriccionAcceso.Cie9mcPresentacion(null, true, null);
        cie9mcSeleccionado = Cie9mcPresentacion.getCie9mc();

        //Si se agrego
        if (cie9mcSeleccionado != null && CapaPresentacion.modoCarga) {
            if (!esGuiVisualizacion && cie9mcSeleccionado != null) {
                dispose();
            } else if (esGuiVisualizacion && cie9mcSeleccionado != null) {
                vectorCie9mc = new Vector<Cie9mc>();
                vectorCie9mc.add(cie9mcSeleccionado);
                MiModeloTabla.cargarTablaCie9mc(
                        vectorCie9mc, tablaCie9mc);
                MiModeloTabla.seleccionarFilaDeTabla(
                        cie9mcSeleccionado.getCodigoCie9mc(), tablaCie9mc,
                        tablaCie9mcScrollPanel);
            }
        }
    }

    /**
     * Elimina logicamente una enfermedad Cie9mc de la base de datos.
     *
     * @return true si se eliminó correctamente, false en caso contrario
     */
    public boolean eliminarCie9mc() {
        Cie9mc cie9mc = (Cie9mc) MiModeloTabla.
                recuperarObjetoDeTabla(Cie9mc.class.getName(), tablaCie9mc);

        //Si hay alguna fila seleccionada
        if (cie9mc != null && 
                (CapaPresentacion.modoCarga || CapaPresentacion.modoCarga)) {
            int confirmado = MensajePresentacion.confimarEliminacionObjeto(
                    "enfermedad", "la");

            if (JOptionPane.OK_OPTION == confirmado) {
                if (Cie9mcLogica.eliminarCie9mc(cie9mc)) {
                    //Actualiza la tabla
                    vectorCie9mc.remove(cie9mc);
                    MiModeloTabla.cargarTablaCie9mc(
                            vectorCie9mc, tablaCie9mc);
                    return true;
                } else {
                    return false;
                }
            }
        }
        
        return false;
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {

        //Declaración del evento keyListenerSeleccionar
        KeyListener keyListenerSeleccionar = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    seleccionarCie9mc();
                }
            }
        };
        //Declaración del evento keyListenerBuscarPorCodigo
        KeyListener keyListenerBuscarPorCodigo = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    buscarPorCodigo();
                }
            }
        };
        //Declaración del evento keyListenerBuscarPorNombre
        KeyListener keyListenerBuscarPorNombre = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    buscarPorNombre();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        busquedaPorCodigo.addKeyListener(keyListenerBuscarPorCodigo);
        busquedaPorCodigo.addKeyListener(keyListenerEscape);
        busquedaPorNombre.addKeyListener(keyListenerBuscarPorNombre);
        busquedaPorNombre.addKeyListener(keyListenerEscape);

        tablaCie9mc.addKeyListener(keyListenerSeleccionar);
        tablaCie9mc.addKeyListener(keyListenerEscape);

        tablaCie9mcPropias.addKeyListener(keyListenerSeleccionar);
        tablaCie9mcPropias.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        filtrar.addKeyListener(keyListenerEscape);
        filtrarCie9mcPropias.addKeyListener(keyListenerEscape);

        botonAgregarEnfermedad.addKeyListener(keyListenerEscape);
        botonBuscarPorCodigo.addKeyListener(keyListenerEscape);
        botonBuscarPorNombre.addKeyListener(keyListenerEscape);
    }

    /**
     * Retorna la enfermedad seleccionada.
     *
     * @return El objeto Cie9mc seleccionado
     */
    public static Cie9mc getCie9mcSeleccionado() {
        return cie9mcSeleccionado;
    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 40;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);

        CapaPresentacion.personalizarBotonesPaginadorDesactivado(
                botonAnteriorPaginadorUno, botonSiguientePaginadorUno);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaCie9mc() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaCie9mc.getModel().getColumnCount() > 0) {
            if (buscarPorCodigo) {
                buscarPorCodigo();
            } else {
                buscarPorNombre();
            }
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaCie9mc() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaCie9mc.getModel().getColumnCount() > 0) {

            if (buscarPorCodigo) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (Cie9mcLogica.getVectorCie9mcPorCodigoYEnBd(
                        busquedaPorCodigo.getText()) == null) {
                    Paginador.atrasPaginador(0);
                }
                buscarPorCodigo();
            } else {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (Cie9mcLogica.getVectorCie9mcPorNombreYEnBd(
                        busquedaPorNombre.getText()) == null) {
                    Paginador.atrasPaginador(0);
                }
                buscarPorNombre();
            }
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarEnfermedad;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonBuscarPorCodigo;
    private javax.swing.JButton botonBuscarPorNombre;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JTextField busquedaPorCodigo;
    private javax.swing.JTextField busquedaPorNombre;
    private javax.swing.JTextField filtrar;
    private javax.swing.JTextField filtrarCie9mcPropias;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JPanel panelBusqueda;
    private javax.swing.JPanel panelCie9mcPropias;
    private javax.swing.JPanel panelResultados;
    private javax.swing.JTable tablaCie9mc;
    private javax.swing.JTable tablaCie9mcPropias;
    private javax.swing.JScrollPane tablaCie9mcPropiasScrollPanel;
    private javax.swing.JScrollPane tablaCie9mcScrollPanel;
    private javax.swing.JLabel textoBusquedaPorCodigo;
    private javax.swing.JLabel textoBusquedaPorNombre;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoFiltrarCie9mcPropias;
    // End of variables declaration//GEN-END:variables
    private static Cie9mc cie9mcSeleccionado;
    private Vector<Cie9mc> vectorCie9mc;
    private boolean esGuiVisualizacion;
    private boolean buscarPorCodigo;
}
